The purpose of forward error correction (FEC) is to improve the capacity of a channel by adding some carefully designed redundant information to the data being transmitted through the channel. The process of adding this redundant information is known as channel coding. Convolutional coding and block coding are the two major forms of channel coding. Convolutional codes operate on serial data, one or a few bits at a time. Block codes operate on relatively large (typically, up to a couple of hundred bytes) message blocks. In some occasions, convolutional code maybe more convenient than a block code, as it generates redundant bits and correct errors continuously. A trellis is a device used to encode bits by expanding them to introduce redundancy for error checking, for example. A trellis is made up of flip flops comprising the linear feedback shift register (LFSR) and exclusive OR gates comprising modulo two adders. Because of the LFSR, convolutional code has memory. For example, an input of two or three or more might produce an output of three or four or more channel symbols that are not only dependent on the current block of input bits but also on previous blocks. There are many different trellis systems that may need to be implemented: basic 1:2 encoders, basic 1:3 encoders or any basic n:m encoders. Trellis systems may be programmable or may involve hardware solutions. One problem with conventional programmable trellises is that they require several cycles of operation per bit to generate a channel symbol. The typical approach involves the implementation of a linear feedback shift register which requires numerous add or shift operations. Further, the channel bit generated may not be in the required order for subsequent processing. While hardware solutions may be more efficient for a specific function, they are not reconfigurable to accommodate the many different types of trellises that may be required.